<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
 * 角色表
 * Class Role
 * @package App\Models
 */
class Role extends Model
{
    /**
     * 与模型关联的表名
     * @var string
     */
    protected $table = 'role';

    /**
     * 与表关联的主键
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 主键是否主动递增 默认为 true
     * @var bool
     */
    public $incrementing = true;

    /**
     * 自动递增主键的「类型」 默认为int
     * @var string
     */
    protected $keyType = 'int';

    /**
     * 是否主动维护时间戳 默认为true
     * Eloquent 预期你的数据表中存在 created_at 和 updated_at 两个字段,自动管理这两个列
     * @var bool
     */
    public $timestamps = true;

    /**
     * 如果需要自定义时间戳的格式，在你的模型中设置 $dateFormat 属性。
     * 这个属性决定日期属性在数据库的存储方式，以及模型序列化为数组或者 JSON 的格式：
     * @var string
     */
    protected $dateFormat = "Y-m-d H:i:s";

    /**
     * 不可批量赋值的属性
     * @var array
     */
    protected $guarded = [];

    /**
     * 角色状态
     * @return array
     */
    public function getStatusAttribute($value){
        return [
            'value' => $value,
            'name' => $this->statusValue()[$value],
        ];
    }

    /**
     * 是否是超级管理员
     * @return array
     */
    public function getIsAdministratorAttribute($value){
        return [
            'value' => $value,
            'name' => $this->administratorValue()[$value],
        ];
    }

    /**
     * 权限规则
     * @param $value
     * @return mixed
     */
    public function getRuleAttribute($value){

        return !empty($value) ? json_decode($value, true) : $value;
    }

    /**
     * 保存规则
     * @param $value
     */
    public function setRuleAttribute($value){
        if(!empty($value)){
            $this->attributes['rule'] = json_encode($value);
        } else {
            $this->attributes['rule'] = null;
        }
    }

    /**
     * 状态的中文数组
     * @return array
     */
    public function statusValue(){
        return [
            0 => '禁用',
            1 => '启用',
        ];
    }

    /**
     * 超级管理员中文数组
     * @return array
     */
    public function administratorValue(){
        return [
            0 => '否',
            1 => '是',

        ];
    }

    /**
     * 获取关联角色的所有管理员
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function adminUsers(){
        return $this->hasMany('App\Models\AdminUser', 'role_id', 'id');
    }

}
